package com.itzhouwei.commerce.thread.core.demo2;

import java.util.ArrayList;
import java.util.List;

/**
 * <h1> 线程组就是给不同的线程设计不同的分组，并且在命名上也做区分，在 JDK 中，它的具体表现是 ThreadGroup 这个类<h1/>
 * @description: * 线程组就是给不同的线程设计不同的分组，并且在命名上也做区分，在 JDK 中，它的具体表现是 ThreadGroup 这个类
 * @author：zw，微信公共号：yingshengzw
 * @date: 2021/8/28
 * @Copyright：公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、学习、分享、成长，让自己和他人都能有所收获！
 */
public class ThreadGroupDemo {

   public static List<Thread> DbConnThread(){
        ThreadGroup  db=new ThreadGroup("数据库连接线程组");
        List<Thread> dbConfig=new ArrayList<>();
       for (int i = 0; i <3 ; i++) {
           Thread thread = new Thread(db, new Runnable() {
               @Override
               public void run() {
                   System.err.println("线程名字" + Thread.currentThread().getName() + "  " +
                           "所在线程组是" + Thread.currentThread().getThreadGroup().getName());
               }
           }, "db-thread" + i);
           //把线程添加到集合中
           dbConfig.add(thread);
       }
       //返回线程集合
       return dbConfig;
    }


    public static List<Thread> HttpConnThread(){
        ThreadGroup  http=new ThreadGroup("http请求");
        List<Thread> httpConfig=new ArrayList<>();
        for (int i = 0; i <3 ; i++) {
            Thread thread = new Thread(http, new Runnable() {
                @Override
                public void run() {
                    System.err.println("线程名字" + Thread.currentThread().getName() + "  " +
                            "所在线程组是" + Thread.currentThread().getThreadGroup().getName());
                }
            }, "db-thread" + i);
            //把线程添加到集合中
            httpConfig.add(thread);
        }
        //返回线程集合
        return httpConfig;
    }


    static void startThread(List<Thread> cs){
       cs.forEach(x->x.start());
    }

    /****
     * 测试结果如下
     * @param args
     */

    /***
     * 我们可以发现，采用了线程组技术之后，对于多线程的管理方面会降低一定的复杂度。
     * @param args
     */
    public static void main(String[] args) {
        List<Thread> threads = DbConnThread();
        List<Thread> threads1 = HttpConnThread();
        startThread(threads);
        startThread(threads1);

//        //测试结果不一样
//        startThread(DbConnThread());
//        startThread(HttpConnThread());


    }
}
